
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
   "http://www.w3.org/TR/html4/strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
	<title>04_sort</title>
	<meta name="author" content="Stark" />
	<!-- Date: 2018-10-18 -->
	<script type="text/javascript">
		/**
		 * 根据数字来进行排序的函数
		 */
		// function sortByNum(a,b) {
			// return parseInt(a)-parseInt(b);
		// }
		// alert("11"+1);
		// // 当进行减法的时候会自动进行转换
		// alert("11"-1);
		// var as = [1,2,"11px",33,12,190];
		// // 对于js而言默认是按字符串排序的
		// as.sort(sortByNum);
		// alert(as);
		
		// 根据对象排序
		function Person(name,age) {
			this.name = name;
			this.age = age;
		}
		var p1 = new Person("Leno",39);
		var p2 = new Person("John",23);
		var p3 = new Person("Ada",41);
		var ps = [p1,p2,p3];
		/**
		 * 使用以下方法来处理排序，带来的问题是需要为每一个属性设置一个函数，显然不灵活
		 * 但是如果通过函数返回值调用就不一样了
		 */
		// ps.sort(sortByAge);
		// function sortByName(obj1,obj2){
			// if(obj1.name>obj2.name) return 1;
			// else if(obj1.name==obj2.name) return 0;
			// else return -1;
		// }
		// function sortByAge(obj1,obj2) {
			// return obj1.age-obj2.age;
		// }
		
		ps.sort(sortByProperty("age"));
		function sortByProperty(propertyName) {
			var sortFun = function(obj1,obj2) {
				if(obj1[propertyName]>obj2[propertyName]) return 1;
				else if(obj1[propertyName]==obj2[propertyName]) return 0;
				else return -1;
			}
			return sortFun;
		}
		
		function show() {
			var p = document.getElementById("person");
			for(var i=0;i<ps.length;i++) {
				p.innerHTML+=ps[i].name+","+ps[i].age+"<br/>";
			}
		}
		show();
	</script>
</head>
<body onload="show()">
	<div id="person"></div>
</body>
</html>

